'''
特性：为了使内置类型和类更加统一，引入新式类，新式类的每个类都继承于一个基类
    可以是自定义的类或者其他类，默认是object，子类可以调用父类的构造函数

'''

# 新式类代码查看mro顺序
class D(object):
    pass
class C(D):
    pass
class B(D):
    pass
class A(B, C):
    pass
print(A.__mro__)

'''
两种mro算法
    如果是经典类使用DFS算法
    如果是新式类使用BFS算法（广度优先算法）
        1、把根节点放到队列的末尾
        2、每次从队列的头部取一个元素，搜索所有它下一级的元素，把这些元素放到
        队列的末尾，并把这个元素记为它下一级元素的前驱。
        3、找到所有的元素时结束程序
        4、如果遍历整个树还没有找到，程序结束

BFS问题 
第一种：看起来正常，实际上感觉别扭，比如B继承D的f()函数，恰巧c中也实现了f()函数
那么BFS顺序先访问B然后访问C，f()函数会选择c的，这种应该先从B和B的父类开始
找才是正确的顺序，称为单调性

第二种：菱形模式下BFS解决了DFS查找顺序的问题，但是它也违背了单调性
'''